The primary purpose of transmission codes is to transform the frequency spectrum of a serial data stream so that clocking can be recovered readily and ac (alternating current) coupling is possible. The code must also provide special characters outside the data alphabet for functions such as character synchronization, frame delimiters and perhaps for abort, reset, idle, diagnostics, etc. Codes are also used, often in combination with signal waveform shaping, to adapt the signal spectrum more closely to specific channel requirements. In most cases a reduction in bandwidth by constraints on both the high and the low frequency components is desirable to reduce distortion in the transmission media, especially electromagnetic cables, or in the band limited receiver, and to reduce the effects of extrinsic and intrinsic noise.
Another aspect of codes is their interaction with noise and errors in the line digits. The redundancy associated with line codes can be used to supplement other error detection mechanisms or to monitor the quality of the channel with a minimal amount of circuitry.
Such codes generally exhibit the undesirable feature of enlarging error bursts in the decoded data, making detection by a cyclic redundancy check more difficult. A good transmission code should minimize these effects.
For fiber optic links and intra-establishment wire links, interest centers for many reasons on the family of two-level codes. For wire links one prefers codes with no dc (direct current) and little low frequency content in order to dc isolate the transmission line from the driver and receiver circuitry, usually by transformers, and to reduce signal distortion on the line. Although these factors do not apply to the fiber optic case, good low frequency characteristics of the code are helpful for a number of reasons.
The high gain fiber optic receivers need an ac coupling stage near the front end. The control of the drive level, receiver gain, and equalization is simplified and the precision of control is improved, if it can be based on the average signal power, especially at top rates. DC restore circuits tend to lose precision with rising data rates and cease to operate properly below the maximum rates for other circuits required in a transceiver. Finally, if the time constants associated with the parasitic capacitances at the front end of a receiver are comparable to or longer than a baud interval, a signal with reduced low frequency content will suffer less distortion and will enable many links to operate without an equalizing circuit.
The Manchester and related codes are simple two-level codes and solve the clocking and low frequency problems very well. They translate each bit into two bits for transmission and are a good choice whenever the high clocking rates cause no problems in the logic or analog circuits, the transducers or on the transmission line. They also reduce the data transmission rate by a factor of two since they encode 2 bits for every data bit (i.e., rate 1/2).
Simple 5B/6B codes translate 5 binary bits into 6 binary digits and raise the number of information bits transmitted per baud interval to 0.833. Unfortunately, the implementation of a 5B/6B code in a byte-oriented (8 bit) system causes burdensome complexities. If the encoding and decoding is done serially, most of the circuits needed have to operate at the baud rate, which sometimes is at the technology limits. Also, there is no simple relationship between the byte clock and the coder clock. Finally, if the frames are not multiples of 5 bytes, the character boundaries will not align with the frame boundaries, which is unattractive, whether corrected or not. If the coding and decoding is done in parallel, there is no simple mechanism to align a byte parallel interface with a 5B/6B coder; the most straightforward way requires shift registers operating at the baud rate.
An article by T. Horiguchi and K. Morita, "An Optimization of Modulation Codes in Digital Recording," IEEE Transactions on Magnetics, Vol. MAG-12, No. 6, November 1976, page 740, is in essence a survey article which cites a great many possible formats for run length limited codes having various d, k values and varying coding rates. It is cited for reference purposes, it being noted that there are no codes suggested in this article having parameters even remotely approaching those of the presently disclosed coding system. Similarly the article is not concerned with maintaining dc balance in the resulting code stream.
An article entitled "Encoding/Decoding for Magnetic Record Storage Apparatus," by R. C. Kiwimagi, IBM Technical Disclosure Bulletin, Vol. 18, No. 10, March 1976, page 3147, discloses a (0,6) rate 4/5 run length limited code which attempts to maintain a dc balance. It is noted that this code is significantly different from the present coding system in that both the codes produced and the coder configuration are quite different than that of the present invention.
U.S. Pat. No. 3,798,635 to Candiani, entitled "Channel Monitor for Depressed-Code PCM Transmission System," discloses an 8-bit to 12-bit code expansion system. It does not disclose the present system's dc balanced run length limited codes.
U.S. Pat. No. 3,577,142 to McMillin, entitled "Code Translation System," discloses a system for translating a 12-bit code into a 8-bit code and is cited as background but does not relate to the present run length limited coding systems.
U.S. Pat. No. 3,594,560 to Stanley, entitled "Digital Expander Circuit," discloses a simple expander for precompressed data and not otherwise related to run length limited coding systems.
U.S. Pat. No. 4,486,739 to Franaszek et al., entitled "Byte Oriented DC Balanced (0,4) 8B/10 B Partitioned Block Transmission Code," the disclosure of which is incorporated herein by reference, discloses a dc balanced code that translates an 8-bit byte of information into 10 binary digits for transmission.
A research report entitled "The ANSI Fibre Channel Transmission Code," IBM RC 18855, Apr. 23, 1993, the disclosure of which is incorporated herein by reference, discloses an 8B/10B transmission code for use in accordance with the Fibre Channel Standard (FCS) developed under the auspices of the American National Standards Institute (ANSI).
U.S. Pat. No. 5,740,186 to Widmer, entitled "Apparatus and Method for Error Correction Based on Transmission Code Violations and Parity," the disclosure of which is incorporated herein by reference, discloses techniques for correcting errors in binary transmission coded data.
U.S. Pat. No. 5,144,304 to McMahon et al., entitled "Data and Forward Error Control Coding Techniques for Digital Signals," discloses a 16B/20B code using balanced vectors in a 8B/9B and 10B/11B sub-encoding scheme.
An article entitled "Binary Codes Suitable for Line Transmission," Electronics Letters, Vol. 5, No. 4, pp. 79-81, Feb. 20, 1969, generally describes dc balanced rate 5/6 and 3/4 codes but does not suggest combining same nor does it show similar embodiment circuitry.
No prior art is known to the inventor, which partitions an 16-bit input block into 9-bit and 7-bit sub-blocks for encoding purposes nor discloses coding apparatus for concurrently doing the logic manipulations for computing the proper code words, the disparity of said code words and, depending upon the disparity of the preceding sub-block, concurrently determining whether a given code word or its complement will be coded.